#ifndef TADPILALISTA_H
#define TADPILALISTA_H

enum Types {entero, real}; /*usado en asSintactico.y para algunas variables globales*/

/* DEFINICIONES PARA LA LISTA DE TUPLAS*/
typedef struct Tuplas{
	char *id;
	char *tipo;
} Tupla;

typedef struct ElemLista{
	Tupla* dato;
	struct ElemLista *sig;  
}ItemLista;

typedef struct LLista{
	ItemLista *primero;
	ItemLista *ultimo;
	int tamanio;
}Lista;

/* DEFINICIONES PARA LA PILA DE LISTAS*/
typedef struct ElemPila{
	Lista * dato;
	struct ElemPila * sig;
}ItemPila;

typedef struct PPila{
	ItemPila *tope;
	int tamanio;
}Pila;

typedef unsigned short int boolean;

/* PILA DE LISTAS DE TUPLAS */

/* Inicializacion */
void initTabla (Pila *pila);

/* True si la pila esta vacia */
boolean es_vaciaTabla (Pila *pila);

/* Apilar */
void insertarNivel (Pila *pila);

/* Desapilar */
void eliminarNivel (Pila *pila);

/* Mostrar por pantalla */
void mostrarTabla (Pila *pila);


/* Pertenece */
boolean perteneceTabla (Pila *pila, Lista*lista);

/* Pertenece2 */
Tupla* perteneceTable (Pila *pila, char* id);

/* Liberar Pila*/
void liberarTabla (Pila *pila);


/* LISTA DE TUPLAS */

/* Inicializacion */
void initLista(Lista *lista);

/* True si la lista esta vacia */
boolean es_vaciaLista(Lista *lista);
 
/* Insertar */
void insertar (Lista *lista, char*var, char *type);

/* Eliminar */
void eliminar (Lista *lista);

/* Mostrar por pantalla */
void mostrarLista(Lista *lista);

/* Pertenece */
Tupla* perteneceLista(Lista *lista, char*elem);

/* Liberar Lista*/
void liberarLista(Lista *lista);

#endif

